Spring JDBC প্রজেক্টে ডাটাবেস অ্যাক্সেস কোডের নির্ভুলতা ও কার্যকারিতা নিশ্চিত করার জন্য Unit Testing এবং Integration Testing অত্যন্ত গুরুত্বপূর্ণ।
Unit Testing হলো কোডের একটি ছোট অংশ (যেমন একটি মেথড বা ক্লাস) আলাদাভাবে পরীক্ষা করা। Spring JDBC-তে Unit Testing করার সময় আসল ডাটাবেস ব্যবহার করা হয় না; পরিবর্তে, মক করা অবজেক্ট ব্যবহার করা হয়।
import static org.mockito.Mockito.*;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.springframework.jdbc.core.JdbcTemplate;
class EmployeeServiceTest {
@Mock
private JdbcTemplate jdbcTemplate;
@InjectMocks
private EmployeeService employeeService;
@Test
void testGetEmployeeCount() {
// Mocking JdbcTemplate response
when(jdbcTemplate.queryForObject("SELECT COUNT(*) FROM employees", Integer.class)).thenReturn(5);
// Test method
int count = employeeService.getEmployeeCount();
// Verify and assert
assertEquals(5, count);
verify(jdbcTemplate, times(1)).queryForObject("SELECT COUNT(*) FROM employees", Integer.class);
}
}
Integration Testing সিস্টেমের বিভিন্ন অংশ (যেমন: Spring Context, DAO, এবং ডাটাবেস) একত্রে কাজ করছে কিনা তা পরীক্ষা করে। এটি সাধারণত একটি বাস্তব ডাটাবেস বা ইন-মেমরি ডাটাবেস (যেমন H2) ব্যবহার করে।
H2 ডাটাবেস ব্যবহার করে টেস্ট:
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.JdbcTest;
import org.springframework.context.annotation.Import;
import org.springframework.jdbc.core.JdbcTemplate;
import static org.junit.jupiter.api.Assertions.*;
@JdbcTest
@Import(EmployeeService.class) // Importing the service
class EmployeeServiceIntegrationTest {
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private EmployeeService employeeService;
@Test
void testAddEmployee() {
// Pre-check database state
int initialCount = jdbcTemplate.queryForObject("SELECT COUNT(*) FROM employees", Integer.class);
// Add an employee
employeeService.addEmployee("John Doe", "HR", 50000);
// Verify database changes
int updatedCount = jdbcTemplate.queryForObject("SELECT COUNT(*) FROM employees", Integer.class);
assertEquals(initialCount + 1, updatedCount);
// Check inserted data
String name = jdbcTemplate.queryForObject("SELECT name FROM employees WHERE name = ?",
new Object[]{"John Doe"}, String.class);
assertEquals("John Doe", name);
}
}
প্যারামিটার | Unit Testing | Integration Testing |
---|---|---|
অংশ | শুধুমাত্র একটি মেথড বা ক্লাস পরীক্ষা করা হয়। | পুরো সিস্টেম বা একাধিক অংশ একত্রে পরীক্ষা করা। |
ডাটাবেস | মক ডাটাবেস ব্যবহার করা হয়। | আসল বা ইন-মেমরি ডাটাবেস ব্যবহার করা হয়। |
গতি | দ্রুত কারণ এটি ডাটাবেসে নির্ভর করে না। | তুলনামূলকভাবে ধীর কারণ এটি ডাটাবেসে কাজ করে। |
জটিলতা | সহজ এবং নির্দিষ্ট লজিকের জন্য আদর্শ। | জটিল সিস্টেম ইন্টিগ্রেশন পরীক্ষা করতে ব্যবহৃত। |
ব্যবহার ক্ষেত্র | ব্যবসায়িক লজিকের জন্য। | ডাটাবেস এবং অ্যাপ্লিকেশন ইন্টিগ্রেশন নিশ্চিত করতে। |
Spring JDBC প্রজেক্টে Unit Testing এবং Integration Testing উভয়ই গুরুত্বপূর্ণ:
উভয়ের সমন্বয় একটি শক্তিশালী এবং নির্ভরযোগ্য অ্যাপ্লিকেশন গড়ে তোলার ভিত্তি।
Read more